"""
配置工具类 - 用于读取和管理配置信息
"""

import yaml
import os
from dotenv import load_dotenv

# 加载环境变量
load_dotenv()

class ConfigManager:
    """配置管理器 - 单例模式实现"""
    _instance = None
    _config = None
    
    def __new__(cls):
        if cls._instance is None:
            cls._instance = super(ConfigManager, cls).__new__(cls)
            cls._instance._load_config()
        return cls._instance
    
    def _load_config(self):
        """加载配置文件"""
        config_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'config.yml')
        try:
            with open(config_path, 'r', encoding='utf-8') as file:
                self._config = yaml.safe_load(file)
        except Exception as e:
            print(f"加载配置文件失败: {e}")
            self._config = {}
    
    def get_config(self, path=None):
        """
        获取配置信息
        :param path: 配置路径，使用点号分隔，例如 'api.gemini.api_key'
        :return: 配置值，如果路径不存在则返回None
        """
        if path is None:
            return self._config
        
        parts = path.split('.')
        value = self._config
        
        for part in parts:
            if isinstance(value, dict) and part in value:
                value = value[part]
            else:
                return None
        
        return value
    
    def get_gemini_config(self):
        """获取Gemini API配置"""
        return self.get_config('api.gemini')
    
    def get_login_config(self):
        """获取登录系统配置"""
        return self.get_config('login')
    
    def get_users(self):
        """
        获取用户信息，包括配置文件中的用户和.env中的默认用户
        :return: 包含所有用户名和密码的字典
        """
        # 从配置文件获取用户
        users = self.get_config('login.users') or {}
        
        # 从环境变量获取默认用户信息
        default_username = os.getenv('DEFAULT_USERNAME')
        default_password = os.getenv('DEFAULT_PASSWORD')
        
        # 如果存在默认用户，添加到用户列表中（不覆盖配置文件中的同名用户）
        if default_username and default_password and default_username not in users:
            users[default_username] = default_password
            
        return users
    
    def get_movie_urls(self):
        """
        获取所有影视资源地址
        """
        movie_urls = self.get_config("api.movie_urls") or {}
        return movie_urls
    
    def get_secret_key(self):
        """获取会话密钥"""
        return self.get_config('login.secret_key')
    
    def get_session_timeout(self):
        """获取会话超时时间"""
        return self.get_config('login.session_timeout')


# 导出便捷函数
def get_config(path=None):
    """获取配置信息"""
    return ConfigManager().get_config(path)

def get_gemini_config():
    """获取Gemini API配置"""
    return ConfigManager().get_gemini_config()

def get_login_config():
    """获取登录系统配置"""
    return ConfigManager().get_login_config()

def get_users():
    """获取用户信息，包括配置文件和环境变量中的用户"""
    return ConfigManager().get_users()

def get_secret_key():
    """获取会话密钥"""
    return ConfigManager().get_secret_key()

def get_session_timeout():
    """获取会话超时时间"""
    return ConfigManager().get_session_timeout() 